const express = require('express');
const cors = require('cors');
const mysql = require('./services/mysql');
const path = require('path');
const bodyParser = require('body-parser');
const stats = require('./routes/stats');
const history = require('./routes/history');
const time = require('./routes/time');
const kline = require('./routes/kline');
const symbols = require('./routes/symbols');
const admin = require('./routes/admin');
const logger = require('./services/logger');

const app = express();
const port = process.env.PORT || 3000;

// 启用CORS
app.use(cors());

// 禁用缓存中间件
app.use((req, res, next) => {
    res.set('Cache-Control', 'no-store, no-cache, must-revalidate, private');
    res.set('Expires', '-1');
    res.set('Pragma', 'no-cache');
    next();
});

// 静态文件服务
app.use(express.static(path.join(__dirname, '../public')));

// 配置Body解析中间件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// 设置静态文件路径
app.use(express.static('public'));
app.use('/assets', express.static(path.join(__dirname, '..', 'public', 'assets')));

// 添加管理页面路由
app.get('/admin/cache', (req, res) => {
  res.sendFile(path.join(__dirname, '..', 'public', 'admin', 'cache.html'));
});

// 添加日志管理页面路由
app.get('/admin/logs', (req, res) => {
  res.sendFile(path.join(__dirname, '..', 'public', 'admin', 'logs.html'));
});

// 在服务器启动前初始化MySQL
(async function initDatabase() {
  try {
    // 创建数据库连接池
    await mysql.createPool();
    console.log('数据库连接池创建成功');
    
    // 创建必要的表结构
    try {
      // 手动获取连接并创建表
      const connection = await mysql.pool.getConnection();
      
      // 创建缓存表
      await connection.query(`
        CREATE TABLE IF NOT EXISTS stats_cache (
          id INT AUTO_INCREMENT PRIMARY KEY,
          symbol VARCHAR(20) NOT NULL,
          \`interval\` VARCHAR(10) NOT NULL,
          \`range\` VARCHAR(20) NOT NULL,
          total INT NOT NULL DEFAULT 0,
          up INT NOT NULL DEFAULT 0,
          down INT NOT NULL DEFAULT 0,
          upPercent FLOAT NOT NULL DEFAULT 0,
          downPercent FLOAT NOT NULL DEFAULT 0,
          updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
          INDEX idx_symbol_interval_range (symbol, \`interval\`, \`range\`),
          UNIQUE KEY uk_symbol_interval_range (symbol, \`interval\`, \`range\`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      `);
      
      console.log('数据库表创建/检查完成');
      connection.release();
      
      console.log('数据库连接成功');
      console.log('缓存更新服务已禁用，所有请求将直接从数据库或币安API获取数据');
    } catch (tableError) {
      console.error('创建表结构失败:', tableError);
    }
  } catch (error) {
    console.error('数据库连接失败:', error);
    process.exit(1);
  }
})();

// 错误处理中间件
app.use((err, req, res, next) => {
    logger.error('服务器错误:', err);
    console.error('服务器错误:', err);
    res.status(500).json({ error: '服务器内部错误', details: err.message });
});

// API 路由
app.use('/api/time', time);
app.use('/api/stats', stats);
app.use('/api/history', history);
app.use('/api/kline', kline);
app.use('/api/symbols', symbols);
app.use('/api/admin', admin);

// 启动服务器
app.listen(port, () => {
    console.log(`服务器运行在 http://localhost:${port}`);
});

// 导出供测试使用
module.exports = app; 